package top.aiprogram.common.utils;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/**
 * Created by HP on 2018/10/15.
 */
/*
使用MD5对密码进行加密,避免数据库中直接存入密码和被反破解.
 */
public class SecurityUtils {

    /**
    *@Author JackQi {www.coder520.com}
    *@Date 2018/10/15 19:28
    *@Description 创建编译的方法,对密码进行编译
     * encrypt是加密的意思
    */
    public static String encrypt(String password){
        try {
            //后面括号里面填写的是,要获取实例的算法的名称,这里是使用MD5进行加密
            MessageDigest md5=MessageDigest.getInstance("MD5");
            byte[] digest = md5.digest(password.getBytes("UTF-8"));
            //使用MD5进行加密,但是有可能会转换的存在乱码,因此需要对其进行处理一下.使用Base64Endoder进行一下编码
            BASE64Encoder base64Encoder=new BASE64Encoder();
            String encode = base64Encoder.encode(digest);
            return encode;
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return null;
    }
    /**
    *@Author JackQi {www.coder520.com}
    *@Date 2018/10/15 19:27
    *@Description 由于编译过去的密码不能够反编译,因此需要在编译后的那一步进行比较,而不能够
     * 继续转换成字符串进行比较
     * 密码校验,比较输入的密码和数据库中存的密码是否一致
    */
    public static boolean checkPassword(String inputpwd,String dbpwd){
        String encrypt = encrypt(inputpwd);
        if (encrypt.equals(dbpwd)){
            return true;
        }else {
            return false;
        }
    }
}
